package com.yunkeji.framework.config;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.yunkeji.common.annotation.TranslationType;
import com.yunkeji.common.translation.TranslationInterface;
import com.yunkeji.common.translation.handler.TranslationBeanSerializerModifier;
import com.yunkeji.common.translation.handler.TranslationHandler;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;

import javax.annotation.PostConstruct;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 翻译模块配置类
 *
 * @author Lion Li
 */
@Slf4j
@Configuration
public class TranslationConfig {

    @Autowired(required = false)
    private List<TranslationInterface<?>> list;

    @Autowired private ObjectMapper objectMapper;

    @PostConstruct
    public void init() {
        if (list != null) {
            Map<String, TranslationInterface<?>> map = new HashMap<>(list.size());
            for (TranslationInterface<?> trans : list) {
                if (trans.getClass().isAnnotationPresent(TranslationType.class)) {
                    TranslationType annotation =
                            trans.getClass().getAnnotation(TranslationType.class);
                    map.put(annotation.type(), trans);
                } else {
                    log.warn(trans.getClass().getName() + " 翻译实现类未标注 TranslationType 注解!");
                }
            }
            TranslationHandler.TRANSLATION_MAPPER.putAll(map);
        }
        // 设置 Bean 序列化修改器
        objectMapper.setSerializerFactory(
                objectMapper
                        .getSerializerFactory()
                        .withSerializerModifier(new TranslationBeanSerializerModifier()));
    }
}
